The present disclosure relates generally to cloud computing, and more particularly to an origin server for a content delivery network.
Cloud computing services can provide computational capacity, data access, networking/routing and storage services via a large pool of shared resources operated by a cloud computing provider. Because the computing resources are delivered over a network, cloud computing is location-independent computing, with all resources being provided to end-users on demand with control of the physical resources separated from control of the computing resources.
Originally the term cloud came from a diagram that contained a cloud-like shape to contain the services that afforded computing power that was harnessed to get work done. Much like the electrical power we receive each day, cloud computing is a model for enabling access to a shared collection of computing resources—networks for transfer, servers for storage, and applications or services for completing work. More specifically, the term “cloud computing” describes a consumption and delivery model for IT services based on the Internet, and it typically involves over-the-Internet provisioning of dynamically scalable and often virtualized resources. This frequently takes the form of web-based tools or applications that users can access and use through a web browser as if it was a program installed locally on their own computer. Details are abstracted from consumers, who no longer have need for expertise in, or control over, the technology infrastructure “in the cloud” that supports them. Most cloud computing infrastructures consist of services delivered through common centers and built on servers. Clouds often appear as single points of access for consumers' computing needs, and do not require end-user knowledge of the physical location and configuration of the system that delivers the services.
The utility model of cloud computing is useful because many of the computers in place in data centers today are underutilized in computing power and networking bandwidth. People may briefly need a large amount of computing capacity to complete a computation for example, but may not need the computing power once the computation is done. The cloud computing utility model provides computing resources on an on-demand basis with the flexibility to bring it up or down through automation or with little intervention.
As a result of the utility model of cloud computing, there are a number of aspects of cloud-based systems that can present challenges to existing application infrastructure. First, clouds should enable self-service, so that users can provision servers and networks with little human intervention. Second, network access; because computational resources are delivered over the network, the individual service endpoints need to be network-addressable over standard protocols and through standardized mechanisms. Third, multi-tenancy. Clouds are designed to serve multiple consumers according to demand, and it is important that resources be shared fairly and that individual users not suffer performance degradation. Fourth, elasticity. Clouds are designed for rapid creation and destruction of computing resources, typically based upon virtual containers. Provisioning these different types of resources must be rapid and scale up or down based on need. Further, the cloud itself as well as applications that use cloud computing resources must be prepared for impermanent, fungible resources; application or cloud state must be explicitly managed because there is no guaranteed permanence of the infrastructure. Fifth, clouds typically provide metered or measured service—like utilities that are paid for by the hour, clouds should optimize resource use and control it for the level of service or type of servers such as storage or processing.
Cloud computing offers different service models depending on the capabilities a consumer may require, including SaaS, PaaS, and IaaS-style clouds. SaaS (Software as a Service) clouds provide the users the ability to use software over the network and on a distributed basis. SaaS clouds typically do not expose any of the underlying cloud infrastructure to the user. PaaS (Platform as a Service) clouds provide users the ability to deploy applications through a programming language or tools supported by the cloud platform provider. Users interact with the cloud through standardized APIs, but the actual cloud mechanisms are abstracted away. Finally, IaaS (Infrastructure as a Service) clouds provide computer resources that mimic physical resources, such as computer instances, network connections, and storage devices. The actual scaling of the instances may be hidden from the developer, but users are required to control the scaling infrastructure.
One particular type of IaaS cloud service is cloud storage. A cloud storage application gives users access to large amounts of redundant, distributed data storage. The user does not need to be concerned with the actual details of how and where the data is stored, as these details will generally be left to the cloud services provider. In some applications, the user may specify policies instructing the cloud services provider on certain levels of redundancy and distribution (e.g., three copies of all data, each stored in separate data centers). However low level details regarding the organization of the data and utilization of the storage devices are generally left to the provider.
As with most data stored today, users often desire that data stored in cloud storage be accessible by other users over the Internet. One way to accomplish this is to run a web server in the cloud computing system and serve the data directly from the cloud storage in response to received requests. Although this approach may be practical for certain applications, it could prove to be inefficient in cases where requests for the data originate from many different geographic regions that may not be near the servers storing the data in the cloud storage system. Further, network problems between the requesting user and the cloud storage system storing the data may also cause performance issues.
Content delivery networks or “CDNs” solve these issues. A content delivery network is a distributed network of servers designed to mirror content and provide it to a requesting user in the most efficient manner possible, such as from the server geographically closest to the requesting user or from the server with the best performance route between itself and the requesting user. Content delivery networks are used for a large portion of today's Internet traffic, and are especially useful for high bandwidth applications such as streaming audio or video, and software distribution. Companies offering content delivery networks include Akamai, Limelight, Amazon, and Rackspace.
In a content delivery network, content is fed into the network from an origin server. The origin server stores the definitive copy of the data to be mirrored across the content delivery network, and is responsible for keeping the content delivery network abreast of changes to the data. Changes to the data can be pushed from the origin server to the content delivery network as they occur, or the content delivery network can periodically poll the origin server for updates. In other applications, data on the content delivery network is given a time-to-live or “TTL,” after which the content delivery network must refresh the data from the origin server.
Accordingly, it is a desirable feature of a cloud storage system to allow data stored in the system to be replicated and served by a content delivery network. One approach to implementing such a system is to have a separate application (an origin server) storing the content delivery configuration information in a separate database and fetching information from the cloud storage system as requested by the content delivery network. While such a system is functional, it fails to take advantage of the inherent scalability and performance benefits available in a cloud computing system. Accordingly, what is necessary is a high performance, scalable origin server that is integrated into the cloud computing system.